--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
android/README.md e89fc13824101c8e8d034e632df6f2d40edbfe9c (e89fc138) Text, 2.48 KB
MeshChatX Android (Chaquopy)
Native APK with embedded Python (T383838meshchatx/) and a WebView UI.
MeshChatX server (Docker)
The headless/web server is also published as a container (separate from this APK):
• Docker Hub: T383838quad4io/meshchatx
• GHCR: T383838ghcr.io/quad4-software/meshchatx
See the repository root README for T383838docker compose usage.
Prerequisites
• Android SDK (T383838ANDROID_HOME / T383838ANDROID_SDK_ROOT) with T383838cmdline-tools and a matching NDK (see T383838android/app/build.gradle for the pinned NDK version used in CI).
• JDK 17 (Temurin or compatible).
• Chaquopy vendor wheels under T383838android/vendor/ (build locally with T383838bash scripts/build-android-wheels-local.sh from repo root, or use CI artifacts).
Build
From repo root:
T282828
bash scripts/build-android-wheels-local.sh
Tffa657cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
There is a single application variant (no product flavors). Gradle syncs the entire T383838meshchatx/ tree into T383838app/src/main/python/meshchatx/ (including T383838public/repository-server-bundled for the in-app repository server). The T383838fetchRepositoryBundledWheels task runs before sync when bundled wheels are missing; if repo root T383838dist/reticulum_meshchatx-*.whl exists (e.g. from T383838python -m build --wheel -o dist .), that wheel is preferred over PyPI for the bundled set.
ABI selection and packaging
• T383838-PmeshchatxAbis=... or T383838MESHCHATX_ABIS: comma-separated list from T383838arm64-v8a, T383838x86_64, T383838armeabi-v7a (default: all three).
• T383838-PmeshchatxAbiPackaging=universal|split or T383838MESHCHATX_ABI_PACKAGING: T383838universal (default) emits one APK per build type; T383838split may emit per-ABI splits when more than one ABI is selected.
Outputs
With default universal packaging:
• Debug: T383838app/build/outputs/apk/debug/app-debug.apk
• Release (unsigned until you sign): T383838app/build/outputs/apk/release/app-release-unsigned.apk
Signing release APKs
See repo root T383838scripts/sign-android-apks.sh (default glob targets T383838outputs/apk/release/).
Troubleshooting
1. Confirm T383838android/vendor/ contains required T383838.whl files from the wheel build script.
2. Run T383838./gradlew :app:assembleDebug with T383838--stacktrace if Python sync or Chaquopy pip steps fail.
3. Re-run T383838./gradlew :app:assembleDebug after changing T383838meshchatx/ assets; sync runs on merge Python sources tasks.
See ../LICENSE for full text and notices.
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────